home *** CD-ROM | disk | FTP | other *** search
/ Cracking 2 / Cracking II..iso / Tools / icedump 6.018 and nticedump 1.9 / wnt / src / ntddk.inc next >
Encoding:
Text File  |  2000-03-24  |  8.8 KB  |  425 lines

  1. %ifndef        INCLUDED_NTDDK_INC
  2. %define        INCLUDED_NTDDK_INC
  3.  
  4.  
  5. struc        ListEntry
  6. .flink        resd    1
  7. .blink        resd    1
  8. endstruc
  9.  
  10. struc        SingleListEntry
  11. .flink        resd    1
  12. endstruc    
  13.  
  14.  
  15. struc    ObjectAttributes
  16. .Size                resd    1    
  17. .RootDirectory                resd    1
  18. .ObjectName            resd    1
  19. .Attributes            resd    1
  20. .SecurityDescriptor          resd    1
  21. .SecurityQuality        resd    1
  22. endstruc
  23.  
  24.  
  25. struc    KeTrapFrame
  26. .DebugEBP    resd    1    ; 00
  27. .DebugEIP    resd    1    ; 04
  28. .DebugArgMark    resd    1    ; 08
  29. .DebugPointer    resd    1    ; 0C
  30. .TempCS        resd    1    ; 10
  31. .TempEsp    resd    1    ; 14
  32. .DR0        resd    1    ; 18
  33. .DR1        resd    1    ; 1C
  34. .DR2        resd    1    ; 20
  35. .DR3        resd    1    ; 24
  36. .DR6        resd    1    ; 28
  37. .DR7        resd    1    ; 2C
  38. .GS        resw    1    ; 30
  39.         resw    1    ; 32
  40. .ES        resw    1    ; 34
  41.         resw    1    ; 36
  42. .DS        resw    1    ; 38
  43.         resw    1    ; 3A
  44. .EDX        resd    1    ; 3C
  45. .ECX        resd    1    ; 40
  46. .EAX        resd    1    ; 44
  47. .PreviousMode    resd    1    ; 48
  48. .ExceptionList    resd    1    ; 4C
  49. .FS        resw    1    ; 50
  50.         resw    1    ; 52
  51. .EDI        resd    1    ; 54
  52. .ESI        resd    1    ; 58
  53. .EBX        resd    1    ; 5C
  54. .EBP        resd    1    ; 60
  55. .Error        resd    1    ; 64
  56. .EIP        resd    1    ; 68
  57. .CS        resw    1    ; 6C
  58.         resw    1    ; 6E
  59. .EFLAGS     resd    1    ; 70
  60. .ESP        resd    1    ; 74
  61. .SS        resw    1    ; 78
  62.         resw    1    ; 7A
  63. .ES_V86        resw    1    ; 7C
  64.         resw    1    ; 7E
  65. .DS_V86        resw    1    ; 80
  66.         resw    1    ; 82
  67. .FS_V86        resw    1    ; 84
  68.         resw    1    ; 86
  69. .GS_V86        resw    1    ; 88
  70. endstruc
  71.  
  72. struc            KDPC
  73. .Type            resw    1
  74. .Number            resb    1
  75. .Importance        resb    1
  76. .DpcListEntry        resb    ListEntry_size
  77. .DeferedRoutine        resd    1
  78. .DeferedContext        resd    1
  79. .SystemArgument1    resd    1
  80. .SystemArgument2    resd    1
  81. .Lock            resd    1
  82. endstruc
  83.  
  84. LowImportance        EQU    0
  85. MediumImportance    EQU    1
  86. HighImportance        EQU    2
  87.  
  88. struc            KAPC
  89. .Type            resw    1
  90. .Size            resw    1
  91.             resd    1
  92. .Thread            resd    1
  93. .ApcListEntry        resb    ListEntry_size
  94. .KernelRoutine        resd    1
  95. .RundownRoutine        resd    1
  96. .NormalRoutine        resd    1
  97. .NormalContext        resd    1
  98. .SystemArgument1    resd    1
  99. .SystemArgument2    resd    1
  100. .ApcStateIndex        resb    1
  101. .ApcMode        resb    1
  102. .Inserted        resb    1
  103.             resb    1
  104. endstruc
  105.  
  106. struc            KAPC_STATE
  107. ApcListHead        resb    2*ListEntry_size
  108. Process            resd    1
  109. KernelApcInProgress    resb    1
  110. KernelApcPending    resb    1
  111. UserApcPending        resb    1            
  112.             resb    1
  113. endstruc
  114.  
  115. struc            DISPATCHER_HEADER
  116. .Type            resb    1
  117. .Absolute        resb    1
  118. .Size            resb    1
  119. .Inserted        resb    1
  120. .SignalState        resd    1
  121. .WaitListHead        resb    ListEntry_size    
  122. endstruc
  123.  
  124. struc            KTIMER
  125. .Header            resb    DISPATCHER_HEADER_size
  126. .DueTime        resd    2
  127. .TimerListEntry        resb    ListEntry_size
  128. .DPC            resd    1
  129. .Period            resd    1        
  130. endstruc
  131.  
  132. struc            KSEMAPHORE
  133. .Header            resb    DISPATCHER_HEADER_size
  134. .Limit            resd    1
  135. endstruc
  136.  
  137. struc            WaitBlock
  138. .WaitListEntry        resb    ListEntry_size
  139. .Thread            resd    1
  140. .Object            resd    1
  141. .NextWaitBlock        resd    1
  142. .WaitKey        resw    1
  143. .WaitType        resw    1
  144. endstruc
  145.  
  146. struc            KTHREAD
  147. .Header            resb    DISPATCHER_HEADER_size
  148. .MutantListHead        resb    ListEntry_size
  149. .InitialStack        resd    1
  150. .StackLimit        resd    1
  151. .UserTeb        resd    1
  152. .TlsArray        resd    1
  153. .KernelStack        resd    1
  154. .DebugActive        resb    1
  155. .State            resb    1
  156. .Alerted        resb    1
  157.             resb    1
  158. .Iopl            resb    1
  159. .NpxState        resb    1
  160. .Saturation        resb    1
  161. .Priority        resb    1
  162. .ApcState        resb    KAPC_STATE_size
  163. .ContextSwitches    resd    1
  164. .WaitStatus        resd    1
  165. .WaitIrql        resb    1
  166. .WaitMode        resb    1
  167. .WaitNext        resb    1
  168. .WaitReason        resb    1
  169. .WaitBlockList        resd    1
  170. .WaitListEntry        resb    ListEntry_size
  171. .WaitTime        resd    1
  172. .BasePriority        resb    1
  173. .DecrementCount        resb    1
  174. .PriorityDecrement    resb    1
  175. .Quantum        resb    1
  176. .WaitBlockArray        resb    4*WaitBlock_size
  177. .LegoData        resd    1
  178. .KernelApcDisable    resd    1
  179. .UserAffinity        resd    1
  180. .SystemAfinityActive    resb    1
  181.             resb    1
  182.             resw    1
  183. .ServiceTable        resd    1
  184. .Queue            resd    1
  185. .APCQueueLock        resd    1
  186. .Timer            resb    KTIMER_size
  187. .QueueListEntry        resb    ListEntry_size
  188. .Affinity        resd    1
  189. .Preempted        resb    1
  190. .ProcessReadyQueue    resb    1
  191. .KernelStackResident    resb    1
  192. .NextProcessor        resb    1
  193. .CallbackStack        resd    1
  194. .Win32Thread        resd    1
  195. .TrapFrame        resd    1
  196. .APCStatePointer    resd    1
  197.             resd    1
  198. .EnableStackSwap    resb    1
  199. .LargeStack        resb    1
  200. .ResourceIndex        resb    1
  201. .PreviousMode        resb    1
  202. .KernelTime        resd    1
  203. .UserTime        resd    1
  204. .SavedAPCState        resb    KAPC_STATE_size
  205. .Alertable        resb    1
  206. .ApcStateIndex        resb    1
  207. .ApcQueueable        resb    1
  208. .AutoAlignment        resb    1
  209. .StackBase        resd    1
  210. .SuspendAPC        resb    KAPC_size
  211. .SuspendSemaphore    resb    KSEMAPHORE_size
  212. .ThreadListEntry    resb    ListEntry_size
  213. .FreezeCount        resb    1
  214. .SuspendCount        resb    1
  215. .IdealProcessor        resb    1
  216. .DisableBoost        resb    1
  217. endstruc
  218.  
  219. struc        KProcess
  220.  
  221.  
  222.                             
  223. endstruc
  224.  
  225. %define    KPCRSelfPointer        0xFFDFF000
  226.  
  227. struc            NT_TIB
  228. .ExceptionList       resd    1
  229. .StackBase        resd    1
  230. .StackLimit        resd    1
  231. .SubsytemTib        resd    1
  232. .FiberData        resd    1
  233. .Arbitrary        resd    1
  234. .SelfPointer        resd    1
  235. endstruc
  236.  
  237. struc            KPCR
  238. .NtTib            resb    NT_TIB_size
  239. .SelfPointer            resd    1
  240. .PrcbPointer        resd    1
  241. .Irql            resb    1
  242.             resb    3
  243. .Irr            resd    1
  244. .IrrActive        resd    1
  245. .Idr            resd    1
  246.             resd    1
  247. .pKIDTENTRY        resd    1
  248. .pKGDTENTRY        resd    1
  249. .pKTSS            resd    1
  250. .MajorVersion        resw    1
  251. .MinorVersion        resw    1
  252. .SetMember        resd    1
  253. .SetScaleFactor        resd    1
  254. .DebugActive        resb    1
  255. .Number            resb    1
  256. .VdmAlert        resb    1
  257.             resb    1
  258.             resb    64        ;Kernel Reserved
  259.             resb    64        ;Hal Reserved
  260. .InterruptMode        resd    1
  261. .Spare            resd    1
  262.             resb    68        ;KernelReserved
  263.                         ;From here , a KPRCB struct is nested
  264. endstruc
  265.  
  266. ; the folowing macro expects a POBJECT_ATTRIBUTES in EAX !!!
  267.  
  268. %macro  InitializeObjectAttributes 4
  269.     mov    [eax+ObjectAttributes.Size] , dword ObjectAttributes_size    
  270.     mov    [eax+ObjectAttributes.ObjectName] , %1
  271.     mov    [eax+ObjectAttributes.Attributes]  ,%2
  272.     mov    [eax+ObjectAttributes.RootDirectory]       ,%3
  273.     mov    [eax+ObjectAttributes.SecurityDescriptor] , %4
  274.     mov    [eax+ObjectAttributes.SecurityQuality] , dword 0    
  275. %endmacro    
  276.  
  277.  
  278. HW_ERROR_CODE_ON    EQU    1
  279. HW_ERROR_CODE_OFF    EQU    0
  280.  
  281. NESTED            EQU    1
  282. PRIMARY            EQU    0
  283.  
  284. ;-------------------------------------------------------------------------------
  285. ; these macros build/remove proper Trap frames as expected by the rest of the
  286. ; NT kernel. there are two kinds of Trap frames (second parameter to macro):
  287. ;
  288. ; one we call a Primary frame and is used by exception handlers that are not
  289. ; supposed to nest (i.e. they won't occur while another exception is being
  290. ; processed), it contains less saved state info than a Nested frame,
  291. ;
  292. ; and the other one we call a Nested frame because exceptions and interrupts
  293. ; that use it can be invoked inside other handlers. best (and perhaps only ;-)
  294. ; example is the int2E handler (native API). this frame contains more state
  295. ; info, and chaining to previous frames
  296. ;
  297. ; these macros omit saving debugging related information, you might want to
  298. ; take this into account when investigating some problems ;-)
  299. ;
  300. ; the first macro parameter specifies if the error code is saved by the CPU
  301. ; itself (OFF) or should be simulated by the macro (ON)
  302. ;-------------------------------------------------------------------------------
  303. %macro    ExceptionFrame2KeTrapFrame 2
  304.  
  305. %if    %1 = HW_ERROR_CODE_ON
  306.     push    byte 0                    ; fake Error Code
  307. %endif
  308.  
  309.     push    ebp
  310.     push    ebx
  311.     push    esi
  312.     push    edi
  313.     push    fs
  314.     push    byte 0x30
  315.     pop    fs
  316.     xor    ebx, ebx
  317.     push    dword [fs:ebx]
  318.     mov    esi , [fs:0x124]
  319.  
  320. %if    %2 = NESTED
  321.     mov    dword [fs:ebx] , -1
  322.     push    dword [esi+KTHREAD.EnableStackSwap]
  323. %elif    %2 = PRIMARY
  324.     push    byte -1
  325. %else
  326. %error specify NESTED or PRIMARY, not some bullshit like %2
  327. %endif
  328.  
  329.     push    eax
  330.     push    ecx
  331.     push    edx
  332.     push    ds
  333.     push    es
  334.     push    gs
  335.     push    byte 0x23
  336.     push    byte 0x23
  337.     pop    ds
  338.     pop    es
  339.     sub    esp , byte 0x30
  340.     test    byte [esp+KeTrapFrame.EFLAGS+2], 2    ; V86 client?
  341.     jz    %%PM
  342.  
  343.     movzx    ebx , word [esp+KeTrapFrame.DS_V86]
  344.     mov    [esp+KeTrapFrame.DS] , ebx
  345.     movzx    ebx , word [esp+KeTrapFrame.ES_V86]
  346.     mov    [esp+KeTrapFrame.ES] , ebx
  347.     movzx    ebx , word [esp+KeTrapFrame.FS_V86]
  348.     mov    [esp+KeTrapFrame.FS] , ebx
  349.     movzx    ebx , word [esp+KeTrapFrame.GS_V86]
  350.     mov    [esp+KeTrapFrame.GS] , ebx
  351.  
  352. %if    %2 = NESTED
  353.     mov    bl , 1
  354.     jmp    short %%set_prevmode
  355. %endif
  356.  
  357. %%PM:
  358.  
  359. %if    %2 = NESTED
  360.     mov    bl , byte [esp+KeTrapFrame.CS]
  361.     and    bl , 1
  362.  
  363. %%set_prevmode:
  364.     mov    byte [esi+KTHREAD.EnableStackSwap] , bl
  365. %endif
  366.  
  367.     mov    ebp , esp
  368.     cld
  369.  
  370. %if    %2 = NESTED
  371.     mov    ebx , [esi+KTHREAD.TrapFrame]
  372.     mov    [ebp+KeTrapFrame.EDX] , ebx
  373. %endif
  374.  
  375.     mov    [esi+KTHREAD.TrapFrame] , ebp
  376. %endmacro
  377.  
  378.  
  379.  
  380. %macro    KeTrapFrame2ExceptionFrame 2
  381.  
  382.     mov    edx , [ebp+KeTrapFrame.ExceptionList]
  383.     mov    [fs:0] , edx
  384.  
  385. %if    %2 = NESTED
  386.     mov    esi , [fs:0x124]
  387.     mov    edx , [ebp+KeTrapFrame.EDX]
  388.     mov     [esi+KTHREAD.TrapFrame] , edx    
  389.     mov    dl , [ebp+KeTrapFrame.PreviousMode]
  390.     mov    [esi+KTHREAD.EnableStackSwap] , dl
  391. %endif
  392.  
  393.     lea    esp , [ebp+KeTrapFrame.GS]
  394.     test    byte [ebp+KeTrapFrame.EFLAGS+2] , 2
  395.     jnz    %%V86
  396.  
  397.     pop    gs
  398.     pop    es
  399.     pop    ds
  400.  
  401. %%V86:
  402.     lea    esp , [ebp+KeTrapFrame.EDX]
  403.     pop    edx
  404.     pop    ecx
  405.     pop    eax        
  406.     lea    esp , [ebp+KeTrapFrame.FS]
  407.     test    byte [ebp+KeTrapFrame.EFLAGS+2] , 2
  408.     jnz    %%V86_
  409.  
  410.     pop    fs
  411.  
  412. %%V86_:
  413.     lea    esp , [ebp+KeTrapFrame.EDI]
  414.         pop    edi
  415.     pop    esi
  416.     pop    ebx
  417.     pop    ebp
  418.  
  419. %if    %1 = HW_ERROR_CODE_ON
  420.     add    esp , byte 4        ;if we pushed ErrorCode , then pop it    
  421. %endif
  422. %endmacro
  423.  
  424.  
  425. %endif